/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package co.edu.senaclem.persistencia;

import co.edu.senaclem.modelo.Aprendiz;
import co.edu.senaclem.modelo.FichaTitulacion;
import co.edu.senaclem.modelo.Personal;
import static co.edu.senaclem.persistencia.Persistencia.areadb;
import static co.edu.senaclem.persistencia.Persistencia.con;
import static co.edu.senaclem.persistencia.Persistencia.conectar;
import static co.edu.senaclem.persistencia.Persistencia.desconectar;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateless;

/**
 *
 * @author anfeles
 */
@Stateless
public class AprendizDAO implements IAprendizDAO{

    public static ResultSet resSet=null;
    
    @Override
    public void eliminar(Aprendiz aprendiz) throws Exception {
        try {
            if (conectar()) {
                String consulta = "delete from aprendiz where documentoaprendiz='" +aprendiz.getDocumento().getDocumento()+"'";
                areadb = con.createStatement();
                areadb.execute(consulta);

                desconectar();
            }
        } catch (RuntimeException e) {
            throw e;
        }
    }

    @Override
    public void modificar(Aprendiz aprendiz) throws Exception {
        try {
            if (conectar()) {
                String consulta = "update aprendiz set fichatitulacion='" + aprendiz.getFichaTitulacion().getFicha()+ "' where documentoaprendiz='"+aprendiz.getDocumento().getDocumento()+"'";
                areadb = con.createStatement();
                areadb.execute(consulta);

                desconectar();
            }
        } catch (RuntimeException e) {
            throw e;
        }
    }

    @Override
    public void insertar(Aprendiz aprendiz) throws Exception {
        try {
            if (conectar()) {
                String consulta = "insert into aprendiz values('" + aprendiz.getDocumento().getDocumento()+ "','" + aprendiz.getFichaTitulacion().getFicha()+ "')";
                areadb = con.createStatement();
                areadb.execute(consulta);

                desconectar();
            }
        } catch (RuntimeException e) {
            throw e;
        }
    }

    @Override
    public Aprendiz consultarPorId(Long documento) throws Exception {
        try {
            Aprendiz miAprendiz = null;
            if (conectar()) {
                String consulta = "Select * From aprendiz where documentoaprendiz='" + documento + "'";
                //System.out.println("Consulta del aprendiz "+consulta);
                areadb = con.createStatement();
                resSet = areadb.executeQuery(consulta);

                if (resSet.next()) {
                    miAprendiz = new Aprendiz();
                    //se guardan en variables los campos para evitar acceder a resultset ya cerrados
                    int ficha = resSet.getInt("fichatitulacion");
                    IPersonalDAO personalDAO=new PersonalDAO();
                    Personal miPersonal=personalDAO.consultarPorId(resSet.getLong("documentoaprendiz"));                                        
                    miAprendiz.setDocumento(miPersonal);
                    IFichaTitulacionDAO fichaTitulacionDAO = new FichaTitulacionDAO();
                    FichaTitulacion miFichaTitulacion=fichaTitulacionDAO.consultarPorId(ficha);                                        
                    miAprendiz.setFichaTitulacion(miFichaTitulacion);
                }

                resSet.close();
                desconectar();
            }

            return miAprendiz;
        } catch (RuntimeException e) {
            throw e;
        }
    }

    @Override
    public List<Aprendiz> consultar() throws Exception {
        try {
            List<Aprendiz> aprendices = new ArrayList<Aprendiz>();
            if (conectar()) {
                String consulta = "Select * From aprendiz";
                areadb = con.createStatement();
                resSet = areadb.executeQuery(consulta);

                while (resSet.next()) {
                    Aprendiz miAprendiz = new Aprendiz();                   
                    //se consulta el personal asociado al aprendiz
                    IPersonalDAO personalDAO=new PersonalDAO();
                    Personal miPersonal=personalDAO.consultarPorId(resSet.getLong("documentoaprendiz"));                                        
                    miAprendiz.setDocumento(miPersonal);
                    //se consulta la ficha asociada al aprendiz
                    IFichaTitulacionDAO fichaTitulacionDAO=new FichaTitulacionDAO();
                    FichaTitulacion miFichaTitulacion=fichaTitulacionDAO.consultarPorId(resSet.getInt("fichatitulacion"));                                        
                    miAprendiz.setFichaTitulacion(miFichaTitulacion); 

                    aprendices.add(miAprendiz);
                }

                resSet.close();
                desconectar();
            }

            return aprendices;
        } catch (RuntimeException e) {
            throw e;
        }
    }
    
}
